package com.ruoyi.common.core.domain.entity.socket.bean;

import com.ruoyi.common.constant.socket.DeviceTypeContant;
import lombok.Data;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

@Data
public class FenceInfo extends BaseDataPiece {

    /**
     * 作用的设备类别编号。配置电子围栏参数可以下发给不同的设备，包括行为控制器、动力控制器，具体由该位指定。默认下发给行为控制器。
     */
    private int toDeviceType = 2048 * 1 + 1;

    /**
     * 作用的行为编号。配置电子围栏参数可以下发给不同的行为，包括全局、任务属性、行为属性，具体由该位指定。
     * 0：全局电子围栏参数，1-253：行为属性电子围栏参数，254：任务属性电子围栏参数，255：无效值。默认为全局电子围栏参数，即0。
     */
    private short behaviorType;

    /**
     * 配置读操作。0：无操作，1：配置读，3：无效值
     */
    private byte readFlag;

    /**
     * 配置报文应答。0：无操作，1：报文应答，2：报文未应答，3：无效值
     */
    private byte responseFlag;
    /**
     * 当前电子围栏创建或更新的时间。
     */
    private Date createOrUpdateTime;
    /**
     * 电子围栏边界挂起的保护方式，0：继承上一级的方式(行为继承任务，任务继承全局，全局无继承)，
     * 1：边界内保护有效(只能在划定的边界范围外运动)，2：边界外保护有效(只能在划定的边界范围内运动)，3：无效值
     * 默认值：2
     */
    private byte type = 2;
    /**
     * 电子围栏绿区安全距离。0：忽略绿区安全距离，65535：无效值
     */
    private int greenDistance;
    /**
     * 电子围栏黄区安全距离。0：忽略绿区安全距离，65535：无效值
     */
    private int yellowDistance;

    /**
     * 电子围栏边界点数量(即坐标点的个数)。
     */
    private short coordinateNum;

    /**
     * 边界点坐标集合。
     */
    List<Double> coordinates = new ArrayList<>();

    /**
     * 电子围栏是否需要固定起止点。0：不需要，1：需要。
     */
    private int isTwoFixedPointsNeed;


    @Override
    public int getDataPieceLength() {
        return 34 + 4 * coordinates.size();
    }

    public void setDeviceType() {
        deviceType = DeviceTypeContant.FenceInfo;
    }

    public FenceInfo() {
        this((byte) 0, (byte) 1);
    }

    public FenceInfo(byte systemCode, byte deviceCode) {
        super(systemCode, deviceCode);
    }
}
